logo
Brachistochrone

Git-How to manage your code workflow better

Git 的基本操作

Git 的基础使用还是相对比较简单的,很多网站都有基本入门教程,这里仅进行简单记录或记录我自己实际用到的一些命令

  • init:初始化仓库,用于没有「.git」文件夹的情况,初始化后会在当前目录下生成「.git」文件夹
  • clone:克隆远程仓库。需要注意的是基于 ssh 协议的 link 在后续进行操作时可能会有权限问题,建议使用 https 或者 gh 来进行操作
  • add:将变更保存到暂存区
  • status:查看当前状态
  • commit:将暂存区的变更进行确认提交。「-m」携带行内提交信息;「--amend」覆盖/修改上一次的提交
  • push:将本地分支推送到远程数据库,需要设置上游分支。「-f」强制推送,极度危险的操作
  • pull:拉取远程分支并合并到本地。「-r」进行 「rebase」变基到上游分支
  • fetch:获取远程数据库中本地没有的变动
  • rebase:变基,需要指定目标分支,将当前分支已提交的变更的分出点变更到目标
  • checkout/switch:检出/切换,都可以切换分支或者切到某个提交上,我更喜欢使用 switch。具体的不同后续再写
  • reset:重置,用于撤销/重做某些变更,有不同参数,是一个比较常用且不正确使用具有风险的操作,需要补充详细内容
  • tag:打标签。我自己实际使用比较少,所以基本没有什么了解

Git 技巧

Git 命令缩写与别名

如果你用的是「oh-my-zsh」,那么正常情况下应该默认有 「git」插件,如果没有的话就自己装一下 😆。这个插件附带了很多命令以及常用参数的别名,以及一些复杂操作的脚本(比如重命名分支):命令列表。当然还有其他的与 Git 有关的插件,请自行打开 Oh-My-Zsh 的插件列表进行查看

VSCode Git 插件

VSCode 上有很有 Git 的插件,在这里我建议通过这个 Git & GitHub Extension Pack 安装,它包含了以下插件:

Git Flow/工作流

对于代码,我们通常是以工程/项目作为单位进行组织,对于 Git 来说,则是仓库/Repo。对于个人开发者,尤其是刚刚入门或者刚使用 Git 的人来说,协作需求不多,更多的是个人的代码历史和版本的管理控制,在这个阶段,我们经常只在一个分支,通常是 master/main 上进行开发。笔者也是从这个阶段过来的,这样开发当然并没有非常大的问题,但是一旦项目进入到需要协同的阶段,亦或者在 CI/CD 上有新的要求,可能需要对整个 Git 工作流和仓库进行重新组织和管理。网上也有不同的流程规范,一旦你尝试用合理规范去约束个人行为以便代码管理更加高效,你就会爱上这种感觉。经过我个人的实践,我得出了一套既适用于个人也适用于小团队的工作流程。

根据业务和开发流程以及代码健壮性,有以下几种分支:

  • master/main:健壮的主分支。应该确保主分支都是可以基本运行且没有重大 Bug(即通过自测/测试)的,而且原则上不允许任何人直接对主分支进行直接修改,只能通过 PR/MR(Pull Request/Merge Request)来进行更新
  • [pre-]release/test/...:流程分支。根据具体的业务流程要求,需要切出不同的流程分支,用来进行发布前的测试,功能集成和预发布等
  • develop:开发分支。开发分支可以以不同含义进行组织管理,譬如开发者、特性/功能、紧急修复等,对应的前缀应该是 username、feature/function、hotfix,具体根据情况灵活变动

以上三种分支的健壮性通常来说是依次递减的,而且流程分支和开发分支可以以不同含义存在多个,以下流程为例子:

image-20221028155259255

参考文献: